package com.kang.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.kang.pojo.InventoryLiquidation;
import com.kang.pojo.InventoryLiquidationStatistics;
import com.kang.pojo.InventoryLiquidation_itemInformation;
import com.vonechina.entity.page.LiquidationListPage;
import com.vonechina.entity.page.LiquidationStatisticsListPage;


/**
 * 库存盘算--DAO层持久层
 * @author wd
 *
 */
public interface InventoryLiquidationMapper {

	/**
	 * 查询盘点列表总条数
	 * @param liquidationListPage	查询条件（封装的分页实体类）
	 * @return	查询的总记录数
	 */
	public int selectByWhereCount(LiquidationListPage liquidationListPage);

	/**
	 * 查询盘点列表
	 * @param liquidationListPage	查询条件（封装的分页实体类）
	 * @return	盘点集合
	 */
	public List<InventoryLiquidation> selectByWhereList(LiquidationListPage liquidationListPage);

	/**
	 * 根据盘点ID删除库存盘点单
	 * @param inventoryID	盘点ID
	 * @return int型（大于0成功否则失败）
	 */
	public int deleteInventoryLiquidationById(int inventoryID);
	
	/**
	 * 根据盘点ID删除该盘点下的物品
	 * @param inventoryID	盘点ID
	 */
	public void deleteInventoryLiquidationToItemById(int inventoryID);

	/**
	 * 根据盘点id查询盘点信息
	 * @param inventoryID	盘点ID
	 * @return	盘点信息（实体类）
	 */
	public InventoryLiquidation getInventoryLiquidationById(Integer inventoryID);
	
	/**
	 * 根据盘点id查询盘点详情物品列表
	 * @param inventoryID	盘点ID
	 * @return	盘点物品集合List<InventoryLiquidation_itemInformation>
	 */
	public List<InventoryLiquidation_itemInformation> listItemByInventoryID(Integer inventoryID);

	/**
	 * 修改盘点单信息
	 * @param inventoryLiquidation	库存盘点（实体类）
	 * @return	int型（大于0成功否则失败）
	 */
	public int updateInventoryLiquidation(InventoryLiquidation inventoryLiquidation);

	/**
	 * 删除盘点单的中不属于当前集合的物品id的物品
	 * @param inventoryID	盘点ID
	 * @param itemIds	批次ID数组集合
	 * @return	int型（大于0成功否则失败）
	 */
	public int deleteItemNotInLiquidationSingle(@Param("inventoryID") Integer inventoryID,@Param("itemIds") Integer[] itemIds);

	/**
	 * 根据盘点ID和盘点的批次ID查询出盘点物品信息
	 * @param inventoryID	盘点ID
	 * @param itemId	批次ID
	 * @return	盘点物品信息（实体类）
	 */
	public InventoryLiquidation_itemInformation selectLiquidationItemInfoByItemid(@Param("inventoryID") Integer inventoryID, @Param("itemId") Integer itemId);

	/**
	 * 根据盘点ID新增盘点物品到盘点单中
	 * @param pandianWupin	盘点物品信息（实体类）
	 */
	public void insertNewItemToLiquidation(InventoryLiquidation_itemInformation pandianWupin);

	/**
	 * 根据盘点ID和盘点物品修改盘点物品信息
	 * @param pandianWupin	盘点物品信息（实体类）
	 */
	public void updateItemNumberToLiquidation(InventoryLiquidation_itemInformation pandianWupin);

	/**
	 * 提交盘点单
	 * @param userID	提交人ID
	 * @param inventoryID	库存盘点ID
	 * @return	int型（大于0成功否则失败）
	 */
	public int saveAndSubmitinventoryLiquidation(@Param("userID") Integer userID,@Param("inventoryID") Integer inventoryID);

	/**
	 * 查询当前最大的盘点单号
	 * @return	当前最大的盘点单号
	 */
	public String selectMaxLiquidationNumber();

	/**
	 * 新增盘点单信息
	 * @param inventoryLiquidation	库存盘点（实体类）
	 * @return	int型（大于0成功否则失败）
	 */
	public int addNewInventoryLiquidation(InventoryLiquidation inventoryLiquidation);

	/**
	 * 根据盘点单号查询盘点id
	 * @param inventoryNumber	盘点编号
	 * @return	盘点id
	 */
	public Integer getIdByInventoryNumber(String inventoryNumber);

	/**
	 * 库存盘点统计-查询总记录数
	 * @param liquidationStatisticsListPage	查询条件（封装的分页实体类）
	 * @return	总记录数
	 */
	public int selectInventoryLiquidationStatisticsCount(
			LiquidationStatisticsListPage liquidationStatisticsListPage);

	/**
	 * 库存盘点统计-查询盘点集合
	 * @param liquidationStatisticsListPage	查询条件（封装的分页实体类）
	 * @return	盘点集合
	 */
	public List<InventoryLiquidationStatistics> selectInventoryLiquidationStatisticsList(
			LiquidationStatisticsListPage liquidationStatisticsListPage);
	
}
